package logicaPresentacion;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import logicaNegocio.Campus;
import logicaNegocio.GestionAdministrador;



public class FormularioCampus extends JInternalFrame implements ActionListener
{
    /**
	 * 
	 */
	private static final long serialVersionUID = 3751028048754765632L;
	private GestionAdministrador gAd;
    private String eleccion ;
    private JComboBox<String>   jcbCampus;
    private JLabel jlbNombre,jlbCiudad,jlbTelefono;       
    private JTextField  jtfNombre,jtfCiudad,jtfTelefono;
    private JButton btnGuardar,btnCancelar;
    private Box boxVCamposVentana;   
    private JPanel panBotones;   
    private ClaseAObservar observable;
    private boolean excepcion = false;
    
    public FormularioCampus (GestionAdministrador gAd,String eleccion,ClaseAObservar observable)
    {

        super("Introduzca los datos del campus");
        this.gAd = gAd;
        this.eleccion = eleccion;
        this.observable = observable;
        
        setSize(400,400);
        
        Box boxVContenidoVerticalVentana = Box.createVerticalBox();
        Box boxHNombre =  Box.createHorizontalBox();
        jlbNombre = new JLabel("Nombre del Campus");   jtfNombre = new JTextField(15);
        boxHNombre.add(Box.createHorizontalStrut(10));
        boxHNombre.add(jlbNombre);
        boxHNombre.add(Box.createHorizontalStrut(20));
        boxHNombre.add(jtfNombre);
        JPanel panNombre =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panNombre.add(boxHNombre);
        
        Box boxHCiudad =  Box.createHorizontalBox();
        jlbCiudad = new JLabel("Ciudad ");   jtfCiudad = new JTextField(15);
        boxHCiudad.add(Box.createHorizontalStrut(10));
        boxHCiudad.add(jlbCiudad);
        boxHCiudad.add(Box.createHorizontalStrut(11));
        boxHCiudad.add(jtfCiudad);
        JPanel panCiudad =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panCiudad.add(boxHCiudad);
        
        Box boxHTelefono =  Box.createHorizontalBox();
        jlbTelefono = new JLabel("Telefono del campus ");   jtfTelefono = new JTextField(15);
        boxHTelefono.add(Box.createHorizontalStrut(10));
        boxHTelefono.add(jlbTelefono);
        boxHTelefono.add(Box.createHorizontalStrut(11));
        boxHTelefono.add(jtfTelefono);
        JPanel panTelefono =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panTelefono.add(boxHTelefono);
        	        
        boxVCamposVentana = Box.createVerticalBox();
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panNombre);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panCiudad);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panTelefono);

        Box boxHBotones = Box.createHorizontalBox();

        btnGuardar = new JButton("Guardar");
        btnCancelar = new JButton("Cancelar");
        btnGuardar.addActionListener(this);
        btnCancelar.addActionListener(this);
        
        boxHBotones.add(btnGuardar);
        boxHBotones.add(Box.createHorizontalStrut(20));
        boxHBotones.add(btnCancelar);
        boxHBotones.add(Box.createHorizontalStrut(40));
        
        if (eleccion == "Actualizar")
        {
        	ArrayList <Campus> campus = gAd.getcampus();
        	Box boxHCampus =  Box.createHorizontalBox();
            JLabel jlbGrados;
            
            jlbGrados = new JLabel("Elige el Campus ");   jcbCampus = new JComboBox<String>();
            jcbCampus.addActionListener(this);

    		for(int i = 0 ; i<campus.size(); i++)
 
    	    {
    	    Campus c = (Campus) campus.get (i);
            String Nombre = c.getNombreCampus();
            jcbCampus.addItem(Nombre);
            }
    		
    		boxHCampus.add(Box.createHorizontalStrut(10));
    		boxHCampus.add(jlbGrados);
    		boxHCampus.add(Box.createHorizontalStrut(40));
    		boxHCampus.add(jcbCampus);
            JPanel panCampus =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
            panCampus.add(boxHCampus);
            
            boxVCamposVentana.add(Box.createVerticalStrut(10));
            boxVCamposVentana.add(panCampus);
        }
        
        panBotones =  new JPanel(new FlowLayout(FlowLayout.RIGHT) );
        panBotones.add(boxHBotones);
        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(30));
        boxVContenidoVerticalVentana.add(boxVCamposVentana);

        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(20));
        boxVContenidoVerticalVentana.add(panBotones);

        add(boxVContenidoVerticalVentana);
        
        setVisible(true);  
    }
    public void actionPerformed(ActionEvent e)
    {
    	if (e.getSource() instanceof JButton) 
		{
			JButton btnPulsado=(JButton)e.getSource();

			if (btnPulsado==btnGuardar) 
			{ 
				if (("".equals(jtfNombre.getText()))||("".equals(jtfCiudad.getText()))||("".equals(jtfTelefono.getText())))
	            {
					JOptionPane.showMessageDialog(this,"Rellene todos los campos del formulario","Advertencia",JOptionPane.WARNING_MESSAGE);
	            }
				else
				{
					try
                    {
                    	tamanoTelefono(jtfTelefono.getText());
                    }
                    catch(ExcepcionTamano eftlf)
                    {
                    	JOptionPane.showMessageDialog(this,"Error de formato en el telefono, deben ser 9 numeros","Error",JOptionPane.ERROR_MESSAGE);
                    	excepcion=true;
                    }
                    catch(NumberFormatException nfe)
                    {
                
                    	JOptionPane.showMessageDialog(this,"Error de formato en el telefono, deben ser numeros","Error",JOptionPane.ERROR_MESSAGE);
                    	excepcion=true;
                    }
					if(excepcion ==false)
                    {
						if (eleccion == "Anadir")
						{	
	                		gAd.anadirCampus(jtfNombre.getText(),  jtfCiudad.getText(),jtfTelefono.getText());
	                		observable.setTabla();
	                		dispose();
						}
		            	
					  if (eleccion == "Actualizar")
	            		{
						    gAd.actualizarCampus(jtfNombre.getText(),  jtfCiudad.getText(),jtfTelefono.getText(),jcbCampus.getSelectedIndex());
						    observable.setTabla();
						    dispose();
						} 
                    }
                    else
                    {
                    	excepcion = false;
                    } 
                }
			}
			else if (btnPulsado==btnCancelar) 
			{
				dispose();
			}	
	    }
    }
    public void tamanoTelefono(String telefono)throws ExcepcionTamano
    {
    	if(telefono.length()!=9)
    	{
    		throw new ExcepcionTamano();
    	}
    }
}
